package com.hejia.alauda.service;

import java.util.Date;
import java.util.List;

import com.hejia.alauda.entity.*;
import com.hejia.alauda.entity.example.MessageExample;
import com.hejia.alauda.entity.example.SystemMessageExample;
import com.hejia.alauda.utils.Pager;

/**
 * 
 * 消息服务
 *
 *
 * Created by showone on 2014 下午4:30:06.
 *
 * @Copyright: 2014 www.hejiajinrong.com All rights reserved.
 */
public interface MessageService {
	/**
	 * 发送用户消息
	 * 
	 * @param receiverId
	 *            消息接收人ID
	 * @param title
	 *            消息标题
	 * @param content
	 *            消息内容
	 * @param url
	 *            url
	 * @return
	 */
	public boolean sendMessage(Long receiverId, String title, String content,
			String url);

	/**
	 * 设置消息已读
	 * 
	 * @param msgId
	 *            消息ID
	 * @return
	 */
	public boolean setMessageRead(Long userId, Long msgId);

	/**
	 * 删除用户消息
	 * 
	 * @param msgId
	 * @return
	 */
	public boolean deletemMessage(Long msgId);

	/**
	 * 根据用户ID获取消息
	 * 
	 * @param userId
	 *            用户ID
	 * @param type
	 *            消息类型
	 * @return
	 */
	public Pager<Message> getMessageByUserId(Long userId, String type,
			Pager<Message> pager, Boolean readFlag);

	/**
	 * 判断用户是否有新消息
	 * 
	 * @param userId
	 * @return
	 */
	public int havenew(Long userId);

	/**
	 * 发送系统消息
	 * 
	 * @param title
	 *            消息标题
	 * @param content
	 *            消息内容
	 * @param deadline
	 *            失效时间
	 * @return
	 */
	public boolean sendSystemMessage(String title, String content, String url,
			Date deadline);

	/**
	 * 获取系统消息
	 * 
	 * @param pager
	 * @return
	 */
	public SystemMessage getSystemMessage(Long msgId);

	/**
	 * 更新系统消息
	 * 
	 * @param msg
	 * @return
	 */
	public boolean updateSystemMessage(SystemMessage msg);

	/**
	 * 发布系统消息
	 * 
	 * @param msgId
	 * @return
	 */
	public boolean publishSystemMessage(Long msgId);

	/**
	 * 设置系统消息失效
	 * 
	 * @param msgId
	 * @return
	 */
	public boolean setSystemMessageDead(Long msgId);

	/**
	 * 设置系统消息失效
	 * 
	 * @return
	 */
	public void setSystemMessageDead();

	/**
	 * 删除系统消息
	 * 
	 * @param msgId
	 * @return
	 */
	public boolean deleteSystemMessage(Long msgId);

	/**
	 * 删除个人消息
	 * 
	 * @param msgId
	 * @return
	 */
	public boolean deletePersonMessage(Long msgId);

	/**
	 * 获取系统消息
	 * 
	 * @param pager
	 * @return
	 */
	public Pager<SystemMessage> findSystemMessage(SystemMessageExample exp,
			Pager<SystemMessage> pager);

	/**
	 * 获取个人消息
	 * 
	 * @param pager
	 * @return
	 */
	public Pager<Message> findMessage(MessageExample exp, Pager<Message> pager);

	/**
	 * 根据ID获取消息
	 * 
	 * @param id
	 * @return
	 */
	public Message findMessageById(Long id);

	/**
	 * 根据推送机型列出推送消息
	 *
	 * @param pager
	 * @param models
	 * @return
	 */
	Pager<PushMessage> listMessagesOfModels(Pager<PushMessage> pager,
			String models);

	boolean savePushMessage(PushMessage pushMessage);

	/**
	 * 交易成功
	 *
	 * @param order
	 *            订单
	 */
	public void transactionSuccess(Order order);

	/**
	 * 发送App消息
	 * 
	 * @param user
	 *            用户
	 * @param category
	 *            消息类别
	 * @param content
	 *            消息内容
	 * @param url
	 *            URL地址
	 * @return
	 */
	boolean sendAppMessage(User User, String category, String content,
			String url);
	
	/**
	 * 发送App消息
	 * 
	 * @param User
	 * @param category
	 * @param title
	 * @param content
	 * @param url
	 * @param openAppPage
	 * @return
	 */
	boolean sendAppMessage(User User, String category, 
			String title, String content,
			String url, String openAppPage);

	/**
	 * 发送用户广播消息
	 * @param systemMessage	用户广播消息
	 * @return
	 */
	public boolean sendSystemMessage(SystemMessage systemMessage);
	
	DialogMessage findDialogMessage(User user);
}
